﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TISModel;
using BTO;

namespace DAL
{
    public class DALCliente
    {
        public List<BTO.Cliente> list() {
            //Pesquisa dados
            var clientesEntities = new TISModel.TISEntities();

            //cria modelos e add na lista para retornar
            var clientes = (from c in clientesEntities.Cliente
                            select new BTO.Cliente
                            {
                                IDCliente = c.IDCliente,
                                nome = c.nome,
                                morada = c.morada,
                                codpostal = c.codPostal,
                                localizacao = c.localizacao,
                                telefone = c.telefone,
                                passaporte = c.passaporte,
                                email = c.email
                                
                            }).ToList();

            return clientes;
        }

        public BTO.Cliente getByID(int id)
        {
            //Pesquisa dados e cria modelo para retornar
            var clientesEntities = new TISModel.TISEntities();
            var cliente = (from c in clientesEntities.Cliente
                           where c.IDCliente == id
                           select new BTO.Cliente
                           {
                               IDCliente = c.IDCliente,
                               nome = c.nome,
                               morada = c.morada,
                               codpostal = c.codPostal,
                               localizacao = c.localizacao,
                               telefone = c.telefone,
                               passaporte = c.passaporte,
                               email = c.email
                                
                           }).FirstOrDefault();

            return cliente;

        }

        public BTO.Cliente getByPassaporte(String passaporte)
        {
            //Pesquisa dados e cria modelo para retornar
            var clientesEntities = new TISModel.TISEntities();
            var cliente = (from c in clientesEntities.Cliente
                           where c.passaporte == passaporte
                           select new BTO.Cliente
                           {
                               IDCliente = c.IDCliente,
                               nome = c.nome,
                               morada = c.morada,
                               codpostal = c.codPostal,
                               localizacao = c.localizacao,
                               telefone = c.telefone,
                               passaporte = c.passaporte,
                               email = c.email
                            

                           }).FirstOrDefault();

            return cliente;
        }

        public void insert(BTO.Cliente toInsert)
        {
            try
            {
                //cria um entity model e guarda
                var clienteEntities = new TISModel.TISEntities();
                TISModel.Cliente cliente = new TISModel.Cliente();
                cliente.nome = toInsert.nome;
                cliente.morada = toInsert.morada;
                cliente.codPostal = toInsert.codpostal;
                cliente.localizacao = toInsert.localizacao;
                cliente.telefone = toInsert.telefone;
                cliente.passaporte = toInsert.passaporte;
                cliente.email = toInsert.email;

                clienteEntities.AddToCliente(cliente);
                clienteEntities.SaveChanges();

            }
            catch (Exception)
            {
                throw new System.Exception("Não foi Possível inserir o cliente!");
            }
        }

        public void update(BTO.Cliente toUpdate)
        {
            var clienteEntities = new TISModel.TISEntities();
            var cliente = (from c in clienteEntities.Cliente where c.IDCliente == toUpdate.IDCliente select c).FirstOrDefault();

            
                if (cliente != null)
                {
                    try
                    {
                        cliente.nome = toUpdate.nome;
                        cliente.morada = toUpdate.morada;
                        cliente.codPostal = toUpdate.codpostal;
                        cliente.localizacao = toUpdate.localizacao;
                        cliente.telefone = toUpdate.telefone;
                        cliente.passaporte = toUpdate.passaporte;
                        cliente.email = toUpdate.email;


                        clienteEntities.SaveChanges();
                    }
                    catch (Exception)
                    {
                        throw new System.Exception("Não foi possível actualizar o cliente!");
                    }
                }
                else
                {
                    throw new System.Exception("Cliente não encontrado!");
                }
            
        }

        public void delete(int id)
        {
            var clienteEntities = new TISModel.TISEntities();
            var cliente = (from c in clienteEntities.Cliente where c.IDCliente == id select c).FirstOrDefault();

            if (cliente != null)
            {
                try
                {
                    clienteEntities.DeleteObject(cliente);
                    clienteEntities.SaveChanges();
                }
                catch (Exception)
                {
                    throw new System.Exception("Não foi possível remover o cliente!");
                }
            }
            else
            {
                throw new System.Exception("Cliente não encontrado!");
            }

        }
    }
}
